# _*_coding:utf-8_*_
#TODO:用户输入密码
user_password = input('请输入密码:')

#TODO：判断密码的合法性(只是判断)
#条件一：要有大写字母，设置一个常量存取所有的大写字母，方便之后的遍历
#实现方法（要多想几种）：1 都打出来存进去，2 用ascii码表 3 不记得ascii码表 直接'A'<&&<'Z'

#定义三种条件所对应的常量
UPPER = 'ABCDEFGHIGKLMNOPQRSTUVWXYZ'       #python中协定用大写字母来作为常量 和c中不同的是 python中的常量可以修改 c中的不能修改 但一般都不改
LOWER = 'abcdefghigklmnopqrstuvwxyz'
DIGIT = '0123456789'
PUNCTUATION = '!@#$%^&*()_+{}|/*[]\\:"<>?;\',./' #要输出转义字符\ 要用\\ 来输出 ；\? 系统默认就会 \? 连在一起 ；\\? 这样就可以表达应有的意思了

#初始化对应条件的标准
have_upper = False
have_lower = False
have_digit = False
have_punctuation = False

#遍历各个条件
for char in user_password: #取user_password中的每一个字母    #pass #可以写一下todo
    if char in UPPER:
        have_upper = True
    if char in LOWER:
        have_lower = True
    if char in DIGIT:
        have_digit = True
    if char in PUNCTUATION:
        have_punctuation = True
#得出结果：
#is_secure = have_upper and have_lower and have_digit and have_punctuation
#积累两个换行的技巧（python中要求 每一行不超过80个字符 避免影响阅读 出现被迫换行的情况）
##方式一：加括号后，直接回车，进行换行 (更好，更美观)
#is_secue = (have_upper
#            and have_lower
#           and have_digit
#            and have_punctuation)
##方式二：在and之前加一个\，以实现换行
is_secure = have_upper \
    and have_lower \
    and have_digit \
    and have_punctuation
#todo:输出结果
print(is_secure)

#对结果进行分析：多个 True 相加仍为 一个 True；而多个 True 和只要出现一个 False相加，结果为一个False (布尔值加和原则)

###到此，已经有一个普通的版本了，所以我们可以先保存这个版本，然后保存到git





